#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct ok{
	int a;
	struct ok *node;
};

int main()
{
	int aa, i = 0;
	struct ok *p[100];
	//定义结构体指针数组

	scanf("%d",&aa);
	//aa为存入链表的数

	p[i] = (struct ok *)malloc(sizeof(struct ok));
	p[i] -> a = aa;
	p[i+1] = (struct ok *)malloc(sizeof(struct ok));
	p[i] -> node = p[i+1];
	//动态分配第一个和第二个结构体的空间，并且让第一个结构体的指针成员指向第二个结构体

	while(aa != -1)
	{
		i++;
		scanf("%d",&aa);
		p[i] -> a = aa;
		p[i+1] = (struct ok *)malloc(sizeof(struct ok));
		p[i] -> node = p[i+1];
        //动态分配下一个结构体空间，并且让上一个结构体的指针成员指向下一个结构体，直到输入-1时循环结束
	}
	
	while(i > 0)
	{
		i--;
		printf("%d ", p[i] -> a);
		free(p[i]);
        //逆序输出所结构体所存储的数值（不包括-1），并且释放动态空间
	}
	return 0;
}

